// Copyright © SixtyFPS GmbH <info@slint.dev>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0

export global MyGlobal {
    in-out property <string> global-prop: "This is global";
    callback global-callback(string) -> string;
    public function minus-one(value: int) {
        return value - 1;
    }
}

export global SecondGlobal {
    out property <string> second: "second";
}

export struct MyData {
    name: string,
    age: int,
}

struct Secret-Struct {
    balance: int,
}

export { Secret-Struct as Public-Struct }

export enum TestEnum {
    Variant1,
    Variant2,
}

export component App inherits Window {
    in-out property <string> hello: "World";
    callback say-hello(string) -> string;
    callback say_hello_again(string) -> string;

    callback invoke-say-hello(string) -> string;
    invoke-say-hello(arg) => {
        return self.say-hello(arg);
    }
    callback invoke-say-hello-again(string) -> string;
    invoke-say-hello-again(arg) => {
        return self.say-hello-again(arg);
    }
    callback invoke-global-callback(string) -> string;
    invoke-global-callback(arg) => {
        return MyGlobal.global-callback(arg);
    }
    public function plus-one(value: int) {
        return value + 1;
    }

    in-out property <TestEnum> enum-property: TestEnum.Variant2;
    in-out property <[TestEnum]> model-with-enums: [TestEnum.Variant2, TestEnum.Variant1];

    Rectangle {
        color: red;
    }
}

component Diag inherits Window { }

export { Diag as MyDiag }
